package qin.com.utils;

import com.fasterxml.jackson.annotation.JsonIgnore;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;



import java.io.Serializable;



/**

 * Created by geely

 */

@JsonSerialize(include =  JsonSerialize.Inclusion.NON_NULL)

//保证序列化json的时候,如果是null的对象,key也会消失

public class ServerResponse<T> implements Serializable {

    /*定义是否成功的属性*/

    private int status;

    /*存放信息的属性*/

    private String msg;

    /*定义泛型的数据类型data*/

    private T data;



    /*创建构造访求*/

    private ServerResponse(int status){

        this.status = status;

    }

    private ServerResponse(int status,T data){

        this.status = status;

        this.data = data;

    }



    private ServerResponse(int status,String msg,T data){

        this.status = status;

        this.msg = msg;

        this.data = data;

    }



    private ServerResponse(int status,String msg){

        this.status = status;

        this.msg = msg;

    }



    @JsonIgnore

    //使之不在json序列化结果当中

    public boolean isSuccess(){

        return this.status == ResponseCode.SUCCESS.getCode();

    }



    /*对成员变量进行get操作*/

    public int getStatus(){

        return status;

    }

    public T getData(){

        return data;

    }



    public String getMsg(){

        return msg;

    }



    /**

     * 返回一个ServerResponse对象，这个对象的内容是json,{"status":0}

     * @param <T>

     * @return

     */

    public static <T> ServerResponse<T> createBySuccess(){

        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode());

    }



    /**

     * 返回一个ServerResponse对象，这个对象的内容是：{"status":0,"msg":"aa"}

     * @param msg

     * @param <T>

     * @return

     */

    public static <T> ServerResponse<T> createBySuccessMessage(String msg){

        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg);

    }



    /**

     * 返回一个ServerResponse对象，T=list,list{user1,user2},user=name，pass,id;user1={'aa',aa,1},user2={'bb','bb',2}

     * 这个对象的内容是：{"status":0,data:[{"name":"aa","pass":"aa","id":1},{"name":"bb","pass":"bb","id":2}]}

     * @param data

     * @param <T>

     * @return

     */

    public static <T> ServerResponse<T> createBySuccess(T data){

        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),data);

    }



    public static <T> ServerResponse<T> createBySuccess(String msg, T data){

        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg,data);

    }





    public static <T> ServerResponse<T> createByError(){

        return new ServerResponse<T>(ResponseCode.ERROR.getCode(), ResponseCode.ERROR.getDesc());

    }





    public static <T> ServerResponse<T> createByErrorMessage(String errorMessage){

        return new ServerResponse<T>(ResponseCode.ERROR.getCode(),errorMessage);

    }



    public static <T> ServerResponse<T> createByErrorCodeMessage(int errorCode, String errorMessage){

        return new ServerResponse<T>(errorCode,errorMessage);

    }

}